package com.radroxx.balancelg.balancedata;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.widget.Toast;

import com.radroxx.balancelg.DBHelper;
import com.radroxx.balancelg.R;

import java.util.Date;

/**
 * Created by Rodion on 04.07.13.
 */
public class GetBalance {

    private static DBHelper dbConector = null ;
    public static GetBalance[] getBalancesAll( Context context ){
        if(dbConector == null)
            dbConector = new DBHelper(context);
        GetBalance[] rez = dbConector.getBalancesAll();
        return rez;
    }
    public static GetBalance getBalance( Context context , int wdtId ){
        if( dbConector == null )
            dbConector = new DBHelper(context);
        GetBalance rez = dbConector.getBalance(wdtId);
        return rez;
    }


    public GetBalance( Integer WdtId ){
        widgetId = WdtId ;
    }

    //Метобы подчиняющиеся поведению
    public String getData( Context context ){
        if (behavior != null)
        {
            if( updateTime.getTime()+500 < (new Date()).getTime() )
            {
                String r = behavior.getData(Login,Password) ;
                if( r != null )
                {
                    dataCash = r;
                    updateTime = new Date();
                }
                else
                    Toast.makeText(context, R.string.ErrorUpdateText,Toast.LENGTH_SHORT).show();
            }
        }
        return dataCash;
    }
    public boolean getIsLogin(){
        if( behavior != null )
            return behavior.getIsLogin();
        return false;
    }
    public boolean getIsPassword(){
        if( behavior != null )
            return behavior.getIsPassword();
        return false;
    }
    public boolean findLogin(){
        if( behavior != null )
        {
            String lg = behavior.findLogin();
            if( lg == null )
                return false;
            setLogin( lg );
            return true;
        }
        return false;
    }

    //Статический метод для поиска провайдера
    public boolean findProvider(){ return false; }
    //Статичные методы
    public Integer getId(){ return id; }
    public Integer getWidgetId(){return widgetId;}
    public String getLogin(){ return Login; }
    public void setLogin( String value ){ Login = value; }
    public String getPassword(){ return Password; }
    public void setPassword( String value ){ Password = value; }
    public Provider getProvider(){ return provider; }
    public void setProvider( Provider value ){
        provider = value;
        behavior = Provider.createBehaviorBlance( provider );
    }
    public String getUpdateTimeString(){
        int hours = updateTime.getHours();
        int minets = updateTime.getMinutes();
        String rez = "";
        if( hours < 10 )
            rez += "0"+hours;
        else
            rez += hours;
        rez += ":";
        if( minets < 10 )
            rez += "0" + minets ;
        else
            rez += minets;
        return rez;
    }


    //Сохраняет в базе данные про GetBalance
    public boolean Save( Context context ){
        if( dbConector == null )
            dbConector = new DBHelper( context );
        id =  (int)(dbConector.Save( this ));

        dbConector.close();
        dbConector = null;

        if( id == -1 )
            return false;
        return true;
    }
    //Удаляет из базы данные про GetBalance
    public void Delete( Context context ){
        if( dbConector == null )
            dbConector = new DBHelper( context );
        dbConector.Delete( this );
        dbConector.close();
        dbConector = null;
    }


    //Метод создания объекта из курсора
    public static GetBalance createGetBalance( Cursor cursor) {
        if( cursor != null )
        {
            int indexWidgetId = cursor.getColumnIndex(DBHelper.WIDGETID) ;
            if( indexWidgetId >= 0 )
            {
                GetBalance gb = new GetBalance( cursor.getInt( indexWidgetId ) );
                gb.id = cursor.getInt( cursor.getColumnIndex("id") );
                gb.setProvider( Provider.valueOf( cursor.getString( cursor.getColumnIndex(DBHelper.PROVIDER) ) ) );
                gb.setLogin( cursor.getString( cursor.getColumnIndex(DBHelper.LOGIN) ) );
                gb.setPassword( cursor.getString( cursor.getColumnIndex(DBHelper.PASSWORD) ) );
                gb.dataCash = cursor.getString( cursor.getColumnIndex(DBHelper.DATANUMERIC) );
                gb.updateTime = new Date( cursor.getLong( cursor.getColumnIndex(DBHelper.UPDATETIME) ) );
                return gb ;
            }
        }
        return null;
    }

    //Метод создания ContentValues
    public static ContentValues createContentValues( GetBalance gb ){
        ContentValues cv = new ContentValues();
        if( gb.getId() != null )
           cv.put("id",gb.getId());
        cv.put(DBHelper.WIDGETID,gb.getWidgetId());
        cv.put(DBHelper.PROVIDER,gb.getProvider().name());
        cv.put(DBHelper.LOGIN,gb.getLogin());
        cv.put(DBHelper.PASSWORD,gb.getPassword());
        cv.put(DBHelper.DATANUMERIC,gb.dataCash );
        cv.put(DBHelper.UPDATETIME,gb.updateTime.getTime() );
        return cv;
    }

    //Записывает данные из одного GB в другой
    public static GetBalance CopyGetBalance( GetBalance fers ,  GetBalance fast ){
        fers.setProvider( fast.getProvider() );
        fers.setLogin( fast.getLogin() );
        fers.setPassword( fast.getPassword() );
        fers.dataCash = fast.dataCash;
        fers.updateTime = fast.updateTime;
        return fers;
    }

    private behaviorBalance behavior = null;

    private Integer id = null;//id Записи
    private Integer widgetId = null ;//id Widget
    private Provider provider = null ;//Provider type
    private String Login = "" ;//Login
    private String Password = "" ;//Password
    private String dataCash = "" ;
    private Date updateTime = new Date(0);
}
